﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Обработка нажатия ESC или Авторам долгодумающих плагинов посвящается</title>
<meta http-equiv="Content-Type" Content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="../../styles/styles.css">
<link REV="made" href="mailto:spinoza@mail.ru">
<meta name="Author" content="Ivan Sintyurin">
<meta name="description" content="Обработка нажатия ESC или Авторам долгодумающих плагинов посвящается">
<script language="JavaScript" src='../links.js' type="text/javascript"></script>
</head>
<body>

<a name="top"></a>
<h1>Обработка нажатия ESC или &quot;Авторам долгодумающих плагинов посвящается...&quot;</h1>
<div class=navbar>
<a href="../index.html">главная</a> |
<a href="index.html">статьи</a>
</div>

<div align=right>
<code>Иван Синтюрин <a href="mailto:Ivan%20Sintyurin%20<spinoza@mail.ru>?subject=Articles">
<img src="../../images/email.gif" border="0" alt="[spinoza@mail.ru]" width="16" height="16" align="middle">spinoza@mail.ru
</a></code></div>
<hr color="#003399">


  <p class=plain>Очередное воззвание к народу:</p>
  <p class=plain><dfn>ДЕЛАЙТЕ ПЛАГИНЫ ИНТЕРАКТИВНЫМИ!</dfn></p>
  <p class=plain>Это в общем, а в частном...</p>
  <p class=plain>Написали вы свой супер-пупер-мега-плагин. Замечательно!
Если он делает своё тёмное/светлое :-) дело быстро, за доли секунды, то
можете дальше не читать. А <dfn>если некоторые операции, осуществляемые
плагином, требуют определённого времени, то следует обязательно обрабатывать в
плагине нажатие ESC</dfn> (или чего-нибудь ещё).</p>
  <p class=plain>Зачем? Пользователь - существо странное, вдруг он запустил
ваш плагин по ошибке (или тот самостоятельно запустился, что не меняет сути
дела) или сознательно, но резко передумал. Как ему быть в данной ситуации?
FAR убивать? А плагин думает, работает, а пользователь волосы на себе рвёт
и проклинает Вас. Выход прост - плагин должен реагировать (<em>интерактивность!</em>)
на нажатие клавиши <a name="ESC">&laquo;ESC&raquo;</a> (<em>Escape - бегство</em>,
бурж.). Для этого можно использовать, например, следующую функцию (за основу взята функция из файла <em>Examples\MultiArc\ARCMIX.CPP</em>):</p>

<pre class=code>bool CheckForEsc(void)
{
 bool EC=false;
 INPUT_RECORD rec;
 static HANDLE hConInp=GetStdHandle(STD_INPUT_HANDLE);
 DWORD ReadCount;
 while (1)
 {
  PeekConsoleInput(hConInp,&rec,1,&ReadCount);
  if (ReadCount==0) break;
  ReadConsoleInput(hConInp,&rec,1,&ReadCount);
  if (rec.EventType==KEY_EVENT)
     if (rec.Event.KeyEvent.wVirtualKeyCode==VK_ESCAPE &&
         rec.Event.KeyEvent.bKeyDown) EC=true;
 }
 return(EC);
}
</pre>

<p class=plain>Дальше, где нужно, пишем что-то типа:</p>
<pre class=code>...
if(CheckForEsc()) ... //реакция на нажатие ESC, например, выход из плагина
else ... //работаем дальше
...
</pre>
<p class=plain>That's all,  folks :-)</p>

<div class=articlenotes>
<a href="escape_r1.html">дополнения от Василия Мошнинова</a>
</div>

<div align=right><code>
<br>&nbsp;<br>
13.12.1999<br>
Rev. 06.09.2000
</code></div>
<div class=seecont><a href="#top">наверх</a></div>
</body>
</html>